tsunami_by_ms

Author: Copyright 2013, DKeN (Alexandr Gavrilin)
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself Checks for the total of closed ordersIt can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
tsunami_by_ms
//+------------------------------------------------------------------+
//|                                Copyright 2013, Alexandr Gavrilin |
//|                                            http://sovetnikov.net |
//+------------------------------------------------------------------+
/*
26.05.2014
- ïðîôèò
- íåâèäèìûå ñòîïû è òåéêè
- çàêðûòèå âñåõ îðäåðîâ íà ôîðåêñ, ïðè äîñòèæåíèè ïðîôèòà
- ñáðîñ ëîòîâ íà íà÷àëüíûå ïðè äîñòèæåíèè ïðîôèòà îáùåãî
- òðàë
*/

#property copyright "Copyright 2013, DKeN (Alexandr Gavrilin)"
#property link      "http://sovetnikov.net/"
#include <mt4lib.mqh>

string expert="";
extern bool    forex=false; //åñëè ñ÷åò ôîðåêñ, òî òðóå, èíà÷å ôàëçå (íóæíî äëÿ çàêðûòèå ïî ïðîôèòó)
//extern string  list="EURUSD GBPUSD AUDCAD AUDCHF AUDJPY AUDNZD AUDUSD CADCHF CADJPY CHFJPY EURAUD EURCAD EURCHF EURGBP EURJPY EURNZD GBPAUD GBPCAD GBPCHF GBPJPY NZDJPY NZDUSD USDCAD USDCHF USDJPY"; //è ò.ä. ÷åðåç ïðîáåë , íàèìåíîâàíèå äîëæíî ñîâïàäàòü ñ íàèìåíîâàíèåì â òåðìèíàëå (ñïèñîê äëÿ îïöèîíîâ, áåç ìåòàëëîâ)
extern string  list="EURUSD_OP GBPUSD_OP AUDCAD_OP AUDCHF_OP AUDJPY_OP AUDNZD_OP AUDUSD_OP CADCHF_OP CADJPY_OP CHFJPY_OP EURAUD_OP EURCAD_OP EURCHF_OP EURGBP_OP EURJPY_OP EURNZD_OP GBPAUD_OP GBPCAD_OP GBPCHF_OP GBPJPY_OP NZDJPY_OP NZDUSD_OP USDCAD_OP USDCHF_OP USDJPY_OP"; //è ò.ä. ÷åðåç ïðîáåë , íàèìåíîâàíèå äîëæíî ñîâïàäàòü ñ íàèìåíîâàíèåì â òåðìèíàëå (ñïèñîê äëÿ îïöèîíîâ, áåç ìåòàëëîâ)
extern int     magic=1310; //ìàäæèê
extern double  start_lot=1; //íà÷àëüíûé ëîò
extern int     timeout=4; //âðåìÿ äî ýêñïåðàöèè â ìèíóòàõ, åñëè 09 òî îòêëþ÷åíî
extern double  tp=0; //òåéê
extern double  sl=0; //ñòîï
extern double  koef=2.5; //âî ñêîëüêî óâåëè÷èâàòü óáûòî÷íóþ ñäåëêó (ìíîæèòåëü ëîòà)
extern double  max_lot=1000; //ìàêñèìàëüíûé ëîò, ïîñëå êîòîðîãî îñóùåñòâëÿåòñÿ ñáðîñ ëîòà íà íà÷àëüíûé, åñëè âûñòàâèòü ìàêñ ëîò 0, òî èãíîðèðóåì îãðàíè÷åíèå è óâåëè÷èâàåìñÿ äî ïîáåäíîãî (ïîêà íå ñîëüåò)
extern int     signal_bar=1; //1 ïî çàêðûòèþ áàðà, 0 - ïî òåêóùåìó áàðó (ñèãíàë ìîæåò ïðîïàäàòü!)
extern int     tf=0; //ðàáî÷èé ïåðèîä äëÿ èíäèêàòîðà! â ìèíóòàõ, âàðèàíòû: 1,5,15,30,60,240
extern double  profit=100; //â áàêñàõ ïðîôèò, ïîñëå êîòîðîãî ñáðàñûâàåì
extern bool    bVirtual=false; //íåâèäèìûå ñòîïû
extern double  trailingstop=0; //òðåéëèíã ñòîï, óêàçàòü ïóíêòîâ ÷åðåç ñêîëêüî îí âêëþ÷àåòñÿ

extern int    PriceActionFilter  = 1;
extern int    Length             = 3;
extern int    MajorCycleStrength = 4;
extern bool   UseCycleFilter     = false;
extern int    UseFilterSMAorRSI  = 1;
extern int    FilterStrengthSMA  = 12;
extern int    FilterStrengthRSI  = 21;
bool   alertsOn=false;
extern bool   alertsOnMajorCycle = true;
extern bool   alertsOnMinorCycle = false;
bool   alertsOnCurrent    = false;
bool   alertsMessage      = false;
bool   alertsSound        = false;
bool   alertsNotify       = false;
bool   alertsEmail        = false;

bool   arrowsVisible           = true;
bool   arrowsOnMajorCycle      = true;
color  arrowsMajorUpCycleColor = LimeGreen;
color  arrowsMajorDnCycleColor = Red;
int    arrowsMajorUpCycleCode  = 241;
int    arrowsMajorDnCycleCode  = 242;
int    arrowsMajorCycleSize    = 2;

bool   arrowsOnMinorCycle      = true;
color  arrowsMinorUpCycleColor = DeepSkyBlue;
color  arrowsMinorDnCycleColor = PaleVioletRed;
int    arrowsMinorUpCycleCode  = 159;
int    arrowsMinorDnCycleCode  = 159;
int    arrowsMinorCycleSize    = 5;

string arrowsIdentifier        = "ci arrows1";
double arrowsUpperGap          = 1.0;
double arrowsLowerGap          = 1.0;
bool check;
double balance=0;
datetime tm=0;

string symbols[];
int i_tf=0;
datetime tm_start=0;
double g_balance=0;

int max_thread=100; //ìàêñèìàëüíîå êîë-âî ïîòîêîâ , êîòîðûå óïðàâëÿåò ñîâåòíèê îäíîâðåìåííî, ôàêòè÷åñêè áóäåò ãàðàçäî ìåíüøå
bool bPause=false;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//----
   bPause=false;
   check=false;
   tm=TimeCurrent();
   i_tf=tf;
   if(i_tf==0) i_tf=Period();

   string s_list=list;
   if(IsTesting()) s_list=Symbol();
   ushort u_sep=StringGetCharacter(" ",0);

   StringSplit(s_list,u_sep,symbols);
   Print("Çàãðóæåíî èíñòðóìåíòîâ: ",ArraySize(symbols));

   tm_start=(datetime)GlobalVariableGet(StringConcatenate(WindowExpertName(),".time"));
   g_balance=GlobalVariableGet(StringConcatenate(WindowExpertName(),".balance"));
   Comment("");

   if(bVirtual) mvirtual_OrdersToVirtual();
   else mvirtual_VirtualToOrders();
//----
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//----
   Comment("");
   if(bVirtual) virtual_deinit();
//----

  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//----

   if(!work_check(check)) return;

   if(bVirtual) virtual2_init();

   if(forex) trailing_forex(trailingstop,trailingstop,5,bVirtual);

   if(!IsTesting())
     {
      tm_start=(datetime)GlobalVariableGet(StringConcatenate(WindowExpertName(),".time"));
      g_balance=GlobalVariableGet(StringConcatenate(WindowExpertName(),".balance"));
     }
     
   
   if(g_balance!=0.0 && profit>0)
     {

      double pr=NormalizeDouble(AccountEquity()-g_balance,2);

      Comment("Ïðèáûëü â $: ",DoubleToString(pr,2),"\nÑîõðàíåííûé áàëàíñ: ",g_balance,"\nÝêâèòè: ",AccountEquity());

      if(pr>=profit)
        {
         if(forex) my_OrderCloseAll();
         bPause=true; //çàïðåòèì îòêðûòèå íîâûõ îðäåðîâ
         
        }

     }
   int orders[7],all,i;
   double lot;

   all=0;
   ArrayInitialize(orders,0);
   if(IsTesting() || IsOptimization())
     {

      if(timeout>0)
        {
         for(i=OrdersTotal()-1;i>=0;i--)
           {
            if(!OrderSelect(i,SELECT_BY_POS)) continue;
            if(OrderMagicNumber()==magic)
              {

               if(TimeCurrent()-OrderOpenTime()>=timeout*60) order_OrderClose(OrderTicket(),-1,0,CLR_NONE);

              }
           }
        }

     }

   int _all=0;
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;
      if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread) //ïðîâåðèì åñòü ëè îòêðûòûå îðäåðà ïî äðóãèì èíñòðóìåíòàì
        {
         _all++;
        }
     }

   if(_all==0 && (bPause || g_balance==0.0))
     {
      //Åñëè îðäåðî íåò, òî îáíîâèì äàííûå
      tm_start=TimeCurrent();
      if(!IsTesting())GlobalVariableSet(StringConcatenate(WindowExpertName(),".time"),tm_start);
      g_balance=AccountBalance();
      if(!IsTesting())GlobalVariableSet(StringConcatenate(WindowExpertName(),".balance"),g_balance);
      bPause=false; //ñíèìåì ñ ïàóçå, ìîæíî îòêðûâàòü íîâûå îðäåðà
     }

   if(bPause) return; //åñëè ñîâåòíèê îñòàíîâèë íà ïàóçó òî æäåì êîãäà îðäåðà çàêðîþòñÿ è îí ñíîâà ðàçðåøèò òîðãîâàòü

   int op=0;
   bool bNew=bar_isNew(1,i_tf);

   double buy[4],sell[4];

   int imagic=0;
//ïðîãðàììíî îãðàíè÷èì 100 ïîòîêàìè
   for(int m=0;m<max_thread;m++)
     {

      imagic=magic+m;
      for(int j=0;j<ArraySize(symbols);j++)
        {

         if((bNew && signal_bar>0) || signal_bar==0)
           {

            op=0;

            buy[0]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                           PriceActionFilter,
                           Length,
                           MajorCycleStrength,
                           UseCycleFilter,
                           UseFilterSMAorRSI,
                           FilterStrengthSMA,
                           FilterStrengthRSI,
                           alertsOn,
                           alertsOnMajorCycle,
                           alertsOnMinorCycle,
                           alertsOnCurrent,
                           alertsMessage,
                           alertsSound,
                           alertsNotify,
                           alertsEmail,
                           arrowsVisible,
                           arrowsOnMajorCycle,
                           arrowsMajorUpCycleColor,
                           arrowsMajorDnCycleColor,
                           arrowsMajorUpCycleCode,
                           arrowsMajorDnCycleCode,
                           arrowsMajorCycleSize,
                           arrowsOnMinorCycle,
                           arrowsMinorUpCycleColor,
                           arrowsMinorDnCycleColor,
                           arrowsMinorUpCycleCode,
                           arrowsMinorDnCycleCode,
                           arrowsMinorCycleSize,
                           arrowsIdentifier,
                           arrowsUpperGap,
                           arrowsLowerGap,1,signal_bar);

            buy[1]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                           PriceActionFilter,
                           Length,
                           MajorCycleStrength,
                           UseCycleFilter,
                           UseFilterSMAorRSI,
                           FilterStrengthSMA,
                           FilterStrengthRSI,
                           alertsOn,
                           alertsOnMajorCycle,
                           alertsOnMinorCycle,
                           alertsOnCurrent,
                           alertsMessage,
                           alertsSound,
                           alertsNotify,
                           alertsEmail,
                           arrowsVisible,
                           arrowsOnMajorCycle,
                           arrowsMajorUpCycleColor,
                           arrowsMajorDnCycleColor,
                           arrowsMajorUpCycleCode,
                           arrowsMajorDnCycleCode,
                           arrowsMajorCycleSize,
                           arrowsOnMinorCycle,
                           arrowsMinorUpCycleColor,
                           arrowsMinorDnCycleColor,
                           arrowsMinorUpCycleCode,
                           arrowsMinorDnCycleCode,
                           arrowsMinorCycleSize,
                           arrowsIdentifier,
                           arrowsUpperGap,
                           arrowsLowerGap,1,signal_bar+1);

            sell[0]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                            PriceActionFilter,
                            Length,
                            MajorCycleStrength,
                            UseCycleFilter,
                            UseFilterSMAorRSI,
                            FilterStrengthSMA,
                            FilterStrengthRSI,
                            alertsOn,
                            alertsOnMajorCycle,
                            alertsOnMinorCycle,
                            alertsOnCurrent,
                            alertsMessage,
                            alertsSound,
                            alertsNotify,
                            alertsEmail,
                            arrowsVisible,
                            arrowsOnMajorCycle,
                            arrowsMajorUpCycleColor,
                            arrowsMajorDnCycleColor,
                            arrowsMajorUpCycleCode,
                            arrowsMajorDnCycleCode,
                            arrowsMajorCycleSize,
                            arrowsOnMinorCycle,
                            arrowsMinorUpCycleColor,
                            arrowsMinorDnCycleColor,
                            arrowsMinorUpCycleCode,
                            arrowsMinorDnCycleCode,
                            arrowsMinorCycleSize,
                            arrowsIdentifier,
                            arrowsUpperGap,
                            arrowsLowerGap,2,signal_bar);

            sell[1]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                            PriceActionFilter,
                            Length,
                            MajorCycleStrength,
                            UseCycleFilter,
                            UseFilterSMAorRSI,
                            FilterStrengthSMA,
                            FilterStrengthRSI,
                            alertsOn,
                            alertsOnMajorCycle,
                            alertsOnMinorCycle,
                            alertsOnCurrent,
                            alertsMessage,
                            alertsSound,
                            alertsNotify,
                            alertsEmail,
                            arrowsVisible,
                            arrowsOnMajorCycle,
                            arrowsMajorUpCycleColor,
                            arrowsMajorDnCycleColor,
                            arrowsMajorUpCycleCode,
                            arrowsMajorDnCycleCode,
                            arrowsMajorCycleSize,
                            arrowsOnMinorCycle,
                            arrowsMinorUpCycleColor,
                            arrowsMinorDnCycleColor,
                            arrowsMinorUpCycleCode,
                            arrowsMinorDnCycleCode,
                            arrowsMinorCycleSize,
                            arrowsIdentifier,
                            arrowsUpperGap,
                            arrowsLowerGap,2,signal_bar+1);

            //minor
            buy[2]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                           PriceActionFilter,
                           Length,
                           MajorCycleStrength,
                           UseCycleFilter,
                           UseFilterSMAorRSI,
                           FilterStrengthSMA,
                           FilterStrengthRSI,
                           alertsOn,
                           alertsOnMajorCycle,
                           alertsOnMinorCycle,
                           alertsOnCurrent,
                           alertsMessage,
                           alertsSound,
                           alertsNotify,
                           alertsEmail,
                           arrowsVisible,
                           arrowsOnMajorCycle,
                           arrowsMajorUpCycleColor,
                           arrowsMajorDnCycleColor,
                           arrowsMajorUpCycleCode,
                           arrowsMajorDnCycleCode,
                           arrowsMajorCycleSize,
                           arrowsOnMinorCycle,
                           arrowsMinorUpCycleColor,
                           arrowsMinorDnCycleColor,
                           arrowsMinorUpCycleCode,
                           arrowsMinorDnCycleCode,
                           arrowsMinorCycleSize,
                           arrowsIdentifier,
                           arrowsUpperGap,
                           arrowsLowerGap,2,signal_bar);

            buy[3]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                           PriceActionFilter,
                           Length,
                           MajorCycleStrength,
                           UseCycleFilter,
                           UseFilterSMAorRSI,
                           FilterStrengthSMA,
                           FilterStrengthRSI,
                           alertsOn,
                           alertsOnMajorCycle,
                           alertsOnMinorCycle,
                           alertsOnCurrent,
                           alertsMessage,
                           alertsSound,
                           alertsNotify,
                           alertsEmail,
                           arrowsVisible,
                           arrowsOnMajorCycle,
                           arrowsMajorUpCycleColor,
                           arrowsMajorDnCycleColor,
                           arrowsMajorUpCycleCode,
                           arrowsMajorDnCycleCode,
                           arrowsMajorCycleSize,
                           arrowsOnMinorCycle,
                           arrowsMinorUpCycleColor,
                           arrowsMinorDnCycleColor,
                           arrowsMinorUpCycleCode,
                           arrowsMinorDnCycleCode,
                           arrowsMinorCycleSize,
                           arrowsIdentifier,
                           arrowsUpperGap,
                           arrowsLowerGap,2,signal_bar+1);

            sell[2]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                            PriceActionFilter,
                            Length,
                            MajorCycleStrength,
                            UseCycleFilter,
                            UseFilterSMAorRSI,
                            FilterStrengthSMA,
                            FilterStrengthRSI,
                            alertsOn,
                            alertsOnMajorCycle,
                            alertsOnMinorCycle,
                            alertsOnCurrent,
                            alertsMessage,
                            alertsSound,
                            alertsNotify,
                            alertsEmail,
                            arrowsVisible,
                            arrowsOnMajorCycle,
                            arrowsMajorUpCycleColor,
                            arrowsMajorDnCycleColor,
                            arrowsMajorUpCycleCode,
                            arrowsMajorDnCycleCode,
                            arrowsMajorCycleSize,
                            arrowsOnMinorCycle,
                            arrowsMinorUpCycleColor,
                            arrowsMinorDnCycleColor,
                            arrowsMinorUpCycleCode,
                            arrowsMinorDnCycleCode,
                            arrowsMinorCycleSize,
                            arrowsIdentifier,
                            arrowsUpperGap,
                            arrowsLowerGap,3,signal_bar);

            sell[3]=iCustom(symbols[j],i_tf,"ForexMT4Systems_Cycle",
                            PriceActionFilter,
                            Length,
                            MajorCycleStrength,
                            UseCycleFilter,
                            UseFilterSMAorRSI,
                            FilterStrengthSMA,
                            FilterStrengthRSI,
                            alertsOn,
                            alertsOnMajorCycle,
                            alertsOnMinorCycle,
                            alertsOnCurrent,
                            alertsMessage,
                            alertsSound,
                            alertsNotify,
                            alertsEmail,
                            arrowsVisible,
                            arrowsOnMajorCycle,
                            arrowsMajorUpCycleColor,
                            arrowsMajorDnCycleColor,
                            arrowsMajorUpCycleCode,
                            arrowsMajorDnCycleCode,
                            arrowsMajorCycleSize,
                            arrowsOnMinorCycle,
                            arrowsMinorUpCycleColor,
                            arrowsMinorDnCycleColor,
                            arrowsMinorUpCycleCode,
                            arrowsMinorDnCycleCode,
                            arrowsMinorCycleSize,
                            arrowsIdentifier,
                            arrowsUpperGap,
                            arrowsLowerGap,3,signal_bar+1);

            if(alertsOnMajorCycle && op==0)
              {
               if(buy[0]!=0 && buy[1]==0) op=1;
               else if(sell[0]!=0 && sell[1]==0) op=-1;
              }

            if(alertsOnMinorCycle && op==0)
              {
               if(buy[2]!=0 && buy[3]==0) op=1;
               else if(sell[2]!=0 && sell[3]==0) op=-1;
              }
           }

         bool bContinue=false;
         all=0;
         ArrayInitialize(orders,0);

         for(i=OrdersTotal()-1;i>=0;i--)
           {
            if(!OrderSelect(i,SELECT_BY_POS)) continue;

            if(symbols[j]==OrderSymbol()) bContinue=true;

            if(OrderMagicNumber()==imagic) //ïðîâåðèì åñòü ëè îòêðûòûå îðäåðà ïî äàííîìó ïîòîêó
              {
               orders[OrderType()]++;
               all++;
              }
           }

         if(bContinue) continue; //åñëè ìû íàøëè ÷òî ïî äàííîìó èíñòðóìåíòó åñòü îòêðûòàÿ ñäåëêà, òî äàííûé ñèãíàë ïðîïóñêàåòñÿ
         if(all>0) continue; //ïðîïóñêàåì ñèãíàë åñëè åñòü îòêðûòûå ñäåëêè â ýòîì ïîòîêå

                             //åñëè îðäåðîâ â ïîòîêå íåò, òî ïðîâåðèì êàê çàêðûëèñü îðäåðà â ïîòîêå

         if(all==0 && op!=0)
           {

            int minus=0;
            double last_lot=0;
            string smb="";

            for(i=OrdersHistoryTotal()-1;i>=0;i--)
              {
               if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
               if(OrderMagicNumber()==imagic && OrderOpenTime()>=tm_start) //íàéäåì ïîñëåäíèé çàêðûòûé îðäåð
                 {
                  if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())<ND3(0.0)) minus=-1;
                  if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())<ND3(0.0)) minus=-1;

                  if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())>ND3(0.0)) minus=0;
                  if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())>ND3(0.0)) minus=0;

                  if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())==ND3(0.0))minus=1;
                  if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())==ND3(0.0))minus=1;

                  last_lot=OrderLots();
                  smb=OrderSymbol();
                  break;
                 }
              }

            if(smb==symbols[j] && minus==-1) continue; //åñëè ïî ýòîé ïàðå áûë ìèíóñ òî åãî ïðîïóñêàåì

                                                       //Comment("Êîë-âî ìèíóñîâûõ: ",minus);   
            if(minus==-1) lot=NLot(last_lot*koef);
            if(minus==1) lot=NLot(last_lot);
            if(minus==0) lot=NLot(start_lot);

            if(lot>max_lot && max_lot>0) lot=NLot(start_lot); //âûñòàâèì ëîò íà íà÷àëüíûé

            int type=-1;
            if(op==1) type=OP_BUY; else type=OP_SELL;
            //ïîäáèðàåì ëîò åñëè ó íàñ ðàññ÷èòàííûì íå õâàòèò ìàðæè
            while(AccountFreeMarginCheck(symbols[j],type,lot)<=0 || GetLastError()==134)
              {
               lot=NLot(lot/koef); //ïðîáóåì óìåíüøèòü
              }

            if(op==1) order_OrderSendNDD(symbols[j],imagic,OP_BUY,lot,-1,sl,tp,DoubleToStr(timeout,0),0,clrBlue,bVirtual);
            else if(op==-1) order_OrderSendNDD(symbols[j],imagic,OP_SELL,lot,-1,sl,tp,DoubleToStr(timeout,0),0,clrRed,bVirtual);

           }
        }
     }
//----
  }
//+------------------------------------------------------------------+

void my_OrderCloseAll()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;

      if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
        { //ïðîâåðèì åñòü ëè îòêðûòûå îðäåðà ïî äðóãèì èíñòðóìåíòàì
         order_OrderClose(OrderTicket(),-1,0,CLR_NONE);
        }
     }
  }
//+------------------------------------------------------------------+

void trailing_forex(double level1,double step1,int trailingpause_time=5,bool bvirtual=false)
  {

   datetime tm_buy=0,tm_sell=0;
   double st;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;

      if(OrderType()>=2) continue;
      if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
        {

         string n=OrderSymbol();
         double tick=MarketInfo(n,MODE_TICKSIZE);

         double pt=0;
         double stop=OrderStopLoss();
         double p=p(n);
         if(bvirtual) stop=virtual_get_sl(OrderTicket());

         if(OrderType()==OP_BUY)
           {
            pt=(dBid(n)-OrderOpenPrice())/p;
            // Print("buy pt=",pt);    

            st=NormalizeDouble(MathFloor((dBid(n)-step1*p)/tick)*tick,dDigits(n));
            if(pt>=level1 && level1!=0)
              {
               if(stop==0 || (stop<st && TimeCurrent()-tm_buy>=trailingpause_time))
                 {
                  order_OrderModify(OrderTicket(),-1,st,-1,0,Green,bvirtual);
                  tm_buy=TimeCurrent();
                  continue;
                 }
              }

           }

         if(OrderType()==OP_SELL)
           {
            pt=(OrderOpenPrice()-dAsk(n))/p;

            st=NormalizeDouble(MathFloor((dAsk(n)+step1*p)/tick)*tick,dDigits(n));
            if(pt>=level1 && level1!=0)
              {
               if(stop==0 || (stop>st && TimeCurrent()-tm_sell>=trailingpause_time))
                 {
                  order_OrderModify(OrderTicket(),-1,st,-1,0,Green,bvirtual);
                  tm_sell=TimeCurrent();
                  continue;
                 }
              }

           }

        }

     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void mvirtual_OrdersToVirtual()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;
      if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
        {

         if(OrderStopLoss()!=0.0 || OrderTakeProfit()!=0.0)
           {
            virtual_set(OrderTicket(),OrderStopLoss(),OrderTakeProfit());
            order_OrderModify(OrderTicket(),OrderOpenPrice(),0,0,OrderExpiration(),CLR_NONE);
           }

        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void mvirtual_VirtualToOrders()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;
      if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
        {

         if(OrderStopLoss()==0.0 && OrderTakeProfit()==0.0 && virtual_check(OrderTicket()))
           {
            order_OrderModify(OrderTicket(),-1,virtual_get_sl(OrderTicket()),virtual_get_tp(OrderTicket()),0,CLR_NONE);
           }
        }

     }
  }
//+------------------------------------------------------------------+

bool virtual_check(int ticket){
   if(ticket<=0) return (false);
   string n;
   
   if(IsTesting()) n=StringConcatenate("virtual_",DoubleToStr(ticket,0),"_tp");
   else n=StringConcatenate(DoubleToStr(ticket,0),"_tp");
   
   if(GlobalVariableCheck(n)) return (true);
   
   if(IsTesting()) n=StringConcatenate("virtual_",DoubleToStr(ticket,0),"_sl");
   else n=StringConcatenate(DoubleToStr(ticket,0),"_sl");
   
   if(GlobalVariableCheck(n)) return (true);
   
   return (false);
}

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 ---