GTerminal_V5a





//+----------------------------------------------------------------------------+ 
//|                                   Aleksandr Pak, Alma-Ata, 03.2008         |
//|                                                     ekr-ap@mail.ru        |
//|Ñîâåòíèê GTerminal Ãðàôè÷åñêîå óïðàâëåíèå òîðãîâëåé,                        |
//|Ïîëóàâòîìàò íà ïðîáîé/ðàçâîðîò îò ëèíèé, ïî ïàðàìåòðàì â èìåíè ëèíèè        |
//+----------------------------------------------------------------------------+

/* 19_04_2008ã.
GTerminal V5 


Ñòàðòîâàÿ ñòàòüÿ: articles.mql4.com/ru/597

...............................................................................................
 äâóõ ñëîâàõ:
Âûñòàâëÿåòå ëèíèè âðó÷íóþ, äàåòå èìåíà, ñîâåòíèê òîðãóåò ïî ëèíèÿì. 
Îòêðûâàåò è çàêðûâàåò îðäåðà ïî ïåðåñå÷åíèþ ëèíèè ñ öåíîé íà ãëàâíîì ãðàôèêå èëè â îêíå èíäèêàòîðà.
Ñîâåòíèê óñòàíâàëèâàåò òýéêïðîôèò, ñòîïëîññ èç èìåíè ëèíèè èëè ïî ïîëîæåíèåþ ëèíèé èíèöèàöèè.
Íà òî è ïîëóàâòîìàò))
...............................................................................................
Ãðàôè÷åñêèå îðäåðà: ýòî ëèíèè TrendLine  ó êîòîðûõ â ïîëå "èìÿ" çàïèñàíà òîðãîâàÿ îïåðàöèÿ, 
èñïîëíÿåìàÿ ïî öåíå îòíîñèòåëüíî ýòîé ëèíèè.

ÈÑÏÎËÍßÅÌÛÅ ËÈÍÈÈ, ò.å. ëèíèè ïðè ïåðåñå÷åíèè êîòîðûõ ïðîèñõîäèò òîðãîâàÿ îïåðàöèÿ.
         Îòêðûòèå îðäåðà

         BuyStop     tp=x sl=x     //Öåíà (ïðîøëà) âûøå ëèíèè.
         BuyLimit    tp=x sl=x     //Öåíà (ïðîøëà) íèæå ëèíèè
         SellStop    tp=x sl=x     //tp/sl ìîãóò îòñóòñòâîâàòü, ïèøóòñÿ â ëþáîì ïîðÿäêå
         SellLimit   tp=x sl=x

         Çàêðûòèå îðäåðà 
         SLBUY
         TPBUY
         SLSELL
         TPSELL

         Çàêðûòèå âñåõ îðäåðîâ óêàçàííîãî òèïà
         SLALLBUY                
         TPALLBUY
         ALALLSELL
         TPALLSELL

ËÈÍÈÈ ÇÀÄÀÍÈß-ÈÍÈÖÈÀÖÈÈ ÒÝÉÊÏÐÎÔÈÒÀ/ÑÒÎÏËÎÑÑÀ â ïîëÿõ îòñûëàåìîãî îðäåðà.

         SLINITBUY               //
         TPINITBUY
         SLINITSELL
         TPINITSELL

ÏÐÀÂÈËÀ
         Âíîñèòü â ñâîéñòâà/èìÿ. Áîëüøèå /ìàëûå áóêâû íå ðàçëè÷àþòñÿ. Óäîáíî áîëüøèìè. 
         Ëèíèÿ ïðèíÿòàÿ ñîâåòíèêîì ê èñïîëíåíèþ ìåíÿåò öâåò íà öâåò îïåðàöèè (â ñâîéñòâàõ ñîâåòíèêà).
         Òî ÷òî ïîíÿë ñîâåòíèê âîçâðàùàåòñÿ â îïèñàíèå ëèíèè. 
         Áóäåò ëèáî ñ÷èòàííûå ïàðìåòðû, ëèáî O.k., ëèáî íåò èñïîëíåíèÿ.
         Ñìîòðåòü âûñâå÷èâàÿ óêàçàòåëåì ìûøè.
         Ëèíèÿ ïî óìîëÿàíèþ ñðàáàòûâàåò óñëîâèþ âûøå/íèæå CVLOSE 0-ãîáàðà.
         
         Çà êîíöîì ëèíèè íèêàêèå îïåðàöèè ÍÅ èñïîëíÿþòñÿ. Ëèíèè çàäàíèÿ àêòèâíû íåçàâèñèìî îò äëèíû.
         
         Ïðîáåë ìåæäó ïàðàìåòðàìè îáÿçàòåëåí. Ïåðåä è ïîñëå çíàêà "=" ïðîáëà íåò, ïèñàòü ñëèòíî.
         Ëèíèè ñðàáàòûâàþò íà îñíîâíîì ãðàôèêå è â îêíàõ èíäèêàòîðà, ïðè ïåðåñå÷åíèè ñ èíäèêàòîðîì.
         
         Ëèíèè ìîãóò îòëè÷àòüñÿ ïðîèçâîëüíûì òåêñòîì, öèôðîé. 
         Íàïðèìåð â îêíå èíäèêàòîðà ñòàâèì TPBUY 2, à íà îñíîâíîì ãðàôèêå TPBUY. Ïåðâîé ñðàáîòàåò òà, íà êîòîðîé ïåðåñå÷åíèå.
         
                 
         ÈÍÄÈÊÀÒÎÐÛ òîëüêî òå, êîòîðûå ìîæåò óâèäåòü ñîâåòíèê:

         RSI
         CCI
         WPR
         Momentum
         Force Index
         DeMarker
         ATR
         OBV
         MFI

Ïåðèîä èíäèêàòîðà äîëæåí ñîâïàäàòü ñ Period_indicator â ñâîéñòâàõ ñîâåòíèêà. 
Âñå èñïîëíÿåìûå ëèíèè ðàáîòàþò â îêíàõ èíäèêàòîðîâ.


         ÄÅÌÎ/ÐÅÀË
Åñëè òèêè ïðèõîäÿò ðåäêî, òî îæèäàíèå ðåàêöèè ñîâåòíèêà áóäåò âåñüìà çàìåòíî - äî ñëåäóþùåãî òèêà öåíû.
Êðàñíàÿ âåðòèêàëüíàÿ ëèíèÿ â äåìî/ðåàë ýòî Ïàóçà. Êàê òîëüêî îíà íàõîäèòñÿ ëåâåå íóëåâîãî áàðà, 
òàê ñðàçó âñå îïåðàöèè ñîâåòíèêà çàïðåùåíû. Íà÷àâøèåñÿ íå îñòàíàâëèâàåò.

Ïîñëå îòêðûòèÿ îðäåðà îñòàåòñÿ ïóíêòèð. Ýòà óæå ñðàáîòàâøàÿ ëèíèÿ ñâÿçàíà ñ óäàëåíèåì îðäåðà.
Åñëè óäàëèòü ýòîò ïóíêòèð, çàêðîåòñÿ îðäåð. Åñëè óäàëèòü îðäåð - óäàëÿåòñÿ ïóíêòèð.

Ñîâåòíèê ìîæåò îòñûëàòü îðäåðà â äâà ïðèåìà - áåç tp/sl, è ñðàçó ìîäèôèêàöèÿ tp/sl. 

Ñîâåòíèê ðàçðåøàåò òîëüêî îäèí îðäåð Buy è îäèí Sell. Âòîðîé Buy íå îòêðîåò.
Îðäåðà ìîæíî óäàëÿòü âðó÷íóþ. 

Ìîæíî äîëèâàòü âðó÷íóþ, íî ñîâåòíèê èõ íå âèäèò. Àâòîìàòèçàöèÿ äëÿ íèõ ñëåäóþùàÿ:
Îðäåðà îòêðûòûå âðó÷íóþ ìîæíî çàêðûòü ïî ëèíèÿì TP/SLALLBUY  TP/SLALLSELL

Íåò êîíòðîëÿ àêòèâíûõ ñðåäñòâ äåïî. 
Íåò êîíòðîëÿ ïîëîæåíèÿ ëèíèé çàäàíèÿ TP/SLINITBUY  TP/SLINITSELL. 


         ÒÅÑÒÅÐ
Ëèíèè îòêðûòèÿ íå óäàëÿþòñÿ. Ëèíèè ÏÀÓÇÀ íåò. Ïîëüçóéòåñü êíîïêîé "||/>>"


Ëèíèè ãðàôè÷åñêèõ îðäåðîâ ïðîâåðÿþòñÿ íà êàæäîì òèêå çàíîâî, ïîýòîìó ìîæíî ïåðåìåùàòü, ïåðåèìåíîâûâàòü, ìåíÿòü ïàðàìåòðû.


ÑÎÂÅÒÛ: 
1. Ëèíèè óøåäøèå çà êðàé ýêðàíà ìîæíî íàéòè/óäàëèòü => ïðàâàÿ ìûøè/ÑïèñîêÎáúåêòîâ
2. Äëÿ ðàáîòû íà ôüþ÷åðñàõ ïðèìåíÿéòå íàñòðîéêó äâîéíàÿ îòñûëêà îðäåðà.
3. Ãðàôè÷åñêèå îðäåðà-ëèíèè ýêâèâàëåíòû îòëîæåííûì îðäåðàì. Ñðîê äåéñòâèÿ - êîíåö ëèíèè.
4. Óñòàíàâëèâàÿ ëèíèþ îòêðûòèÿ îðäåðà îáÿçàòåëüíî ïðîêîíòðîëèðóéòå óæå èìåþùèåñÿ ëèíèè çàêðûòèÿ, ò.ê. îðäåð ìîæåò ñðàçó çàêðûòüñÿ.

Óñïåõîâ!!!
*/

#property copyright "Aleksandr Pak, Almaty,2008-ver5"
#property link "articles.mql4.com/ru/597"
#property show_inputs
#include <WinUser32.mqh>

 extern double Lot=0.1;          //ðàçìåð ëîòà
 extern int Slipp=6;             //Slippage
 extern int Pop=3;               //ïîïûòîê îòêðûòèÿ îðäåðà. 
 extern int cross_method=1;      //ôëàã ñïîñîáà âû÷èñëåíèÿ ïåðeñå÷åíèÿ öåíà/ëèíèÿ 0=æåñòêî ïî äâóì áàðàì,1 ñðàçó æå ïî îäíîìó êàñàíèþ.
 extern int start=0;             //íà÷àëî àíàëèçà 0=íóëåâîé áàð, 1 = 1 ïåðâûé áàð è ò.ä.
 extern int start_indicator=1;   //áàð íà êîòîðîì ñðàâíèâàåòñÿ èíäèêàòîð
 extern int Period_indicator=14; //ïåðèîä âñåõ èíäèêàòîðîâ
 extern int Magic=0;              //Èäåíòèôèêàöèîííûé íîìåð îðäåðà, ïðèìåíÿòü äëÿ ðàçëè÷åíèÿ ðàçíûõ ñîâåòíèêîâ
 extern bool DoubleOrderSending=False;  //Îòñûëêà îðäåðà ñíà÷àëà ñ ïóñòûìè ïîëÿìè
 extern bool Teg_Pause = TRUE;  //ôëàã îòêëþ÷åíèÿ ëèíèè Ïàóçà, è ðåàêöèè  íà íåå, äåéñòâèòåëüíî â òîðãîâëå, â òåñòåðå âñåãäà îòêëþ÷åíî
 extern bool Teg_DeletOpen=TRUE; //Ëèêâèäàöèÿ ëèíèé îòêðûòèÿ ïðè çàêðûòèè îðäåðà
 extern bool Teg_DeletOrderOnLine=FALSE; //Ëèêâèäàöèÿ îðäåðà åñëè íåò ëèíèè îòêðûòèÿ ïðè çàêðûòèè îðäåðà
 extern color color_buy=Aqua;    //öâåòà ëèíèé buy
 extern color color_sell=Orange; //öâåòà ëèíèé sell
 extern color color_init=Red;    //öâåòà ëèíèé çàäàíèÿ tp/sl

double price0, price1;
double Last_time;
int Buy_ticket,Sell_ticket;
int tp, sl;
double tpinitbuy,slinitbuy,tpinitsell,slinitsell;
int Pause=0;
double last_pause;
int t_first=0; 
int glob_s=0, glob_b=0;

color color_tp_buy=Aqua, color_sl_buy=Aqua;
string BUY_global_name,SELL_global_name;
string message; 
string last_line; 
string Pause_name;
string s_tpinitbuy,s_slinitbuy,s_tpinitsell,s_slinitsell;

int init()
{double t;
               
         BUY_global_name=  "GT_BUY_"+  Symbol();
         SELL_global_name= "GT_SELL_"+ Symbol();
              
         if(!IsTesting())
         {  Buy_ticket = GlobalVariableGet(BUY_global_name);
            if(Buy_ticket!=0)
            {if(OrderSelect(Buy_ticket,SELECT_BY_TICKET)==TRUE) 
                       { t=OrderCloseTime();
                           if(t!=0) { Buy_ticket=0; GlobalVariableSet(BUY_global_name,0); }
                       }   else {Buy_ticket=0; GlobalVariableSet(BUY_global_name,0);}
            }
            
            Sell_ticket = GlobalVariableGet(SELL_global_name);
            if(Sell_ticket!=0)
            {if(OrderSelect(Sell_ticket,SELECT_BY_TICKET)==TRUE) 
                  {t=OrderCloseTime();
                           if(t!=0) { Sell_ticket=0; GlobalVariableSet(SELL_global_name,0); }
                  }        else {Sell_ticket=0;GlobalVariableSet(SELL_global_name,0);}
            }
          }
              
     if(!IsTesting())
     {
         if(Teg_Pause)
         {
         if(ObjectFind("PAUSE")<0)
         {ObjectCreate("PAUSE", OBJ_VLINE, 0,iTime(Symbol(),0,0)+12*60*Period(),0);
         ObjectSet("PAUSE",OBJPROP_WIDTH,1);
         ObjectSet("PAUSE",OBJPROP_COLOR,Red);             
         }
         else ObjectSet("PAUSE",OBJPROP_TIME1,iTime(Symbol(),0,0)+12*60*Period());
         }                  
     }    
    Comment("ticket buy="+DoubleToStr(Buy_ticket,0)+"  ticket sell="+DoubleToStr(Sell_ticket,0));        
return (0);
}
//.....................

int deinit()
{
   ObjectDelete("PipsWork");
   ObjectDelete("PAUSE");
   return(0);
}
//*************************************
//*************************************
void start()
{  int i,j,k,Slipp,Pop,err,crach;
   double t;
   int ticket;
   bool t_busy=TRUE;
         
         RefreshRates();
         t=iTime(Symbol(),0,0);
         if(t>Last_time){Last_time=t; t_first=1;}
 
  if(Buy_ticket!=0)
            {if(OrderSelect(Buy_ticket,SELECT_BY_TICKET)==TRUE) 
                       { t=OrderCloseTime();
                           if(t!=0) { Buy_ticket=0; glob_b=1;}
                       }   else {Buy_ticket=0; glob_b=1;}
            }
  if(Sell_ticket!=0)
            {if(OrderSelect(Sell_ticket,SELECT_BY_TICKET)==TRUE) 
                  {t=OrderCloseTime();
                           if(t!=0) { Sell_ticket=0; glob_s=1; }
                  }        else {Sell_ticket=0; glob_s=1;}
            }
            
    SearchWorkLine();
    
    if(!search_name_pause())
      {
    
     if(IsTradeContextBusy()) 
     {
     while(t_busy){Comment("ÎÆÈÄÀÍÈÅ ÎÊÎÍ×ÀÍÈß ×ÓÆÎÉ ÎÏÅÐÀÖÈÈ"); Sleep(1000); RefreshRates(); t_busy=IsTradeContextBusy(); }
     } 
     else
     {
            
 //........................................................................................................
//.................îïðåäåëåíèå òîðãîâûõ ñèãíàëîâ     
   
                  if(cross_up    ("buystop",color_buy))     OpenBuy();                          
                  if(cross_down  ("buylimit",color_buy))    OpenBuy();
                  if( cross_down ("slbuy",color_buy))       CloseBuy();
                  if(cross_up    ("tpbuy",color_buy))       CloseBuy();
                  if(cross_down  ("slallbuy",color_buy ))   { close_all(OP_BUY); Buy_ticket=0; glob_b=1;  }
                  if(cross_up    ("tpallbuy",color_buy ))   { close_all(OP_BUY); Buy_ticket=0; glob_b=1;  }   
  //************ 
       
       if   (cross_down ("sellstop",color_sell))    OpenSell();   
       if   (cross_up   ("selllimit",color_sell))     OpenSell();
       if   (cross_up   ("slsell",color_sell))           CloseSell();                 
       if   (cross_down ("tpsell",color_sell))         CloseSell();
       if   (cross_up   ("slallsell",color_sell))    {  close_all(OP_SELL); Sell_ticket=0; glob_s=1; }
       if(  cross_down  ("tpallsell",color_sell))  {  close_all(OP_SELL); Sell_ticket=0; glob_s=1; }                                                                                        
//...................................................          
   
   }//IsTradeContextBusy
   } //pause
   
     else{/*Print("Ïàóçà");*/}
      
   if(!IsTesting())
      {if(glob_b==1){glob_b=0; GlobalVariableSet(BUY_global_name,  Buy_ticket);}
         if(glob_s==1){glob_s=0; GlobalVariableSet(SELL_global_name, Sell_ticket);}  
      }
   t_first=0; 
   Comment(StringConcatenate("ticket buy=",DoubleToStr(Buy_ticket,0),"  ticket sell="+DoubleToStr(Sell_ticket,0)));
   ObjectDelete("PipsWork");
}

//******************************************************************************************
int CloseSell()
{
         param(last_line);
         if(Sell_ticket!=0) 
         { 
         if(close(Sell_ticket)==0) 
            {
            Sell_ticket=0; glob_s=1; 
            } 
         }
}

//***************
int CloseBuy()
{
                        param(last_line);
                        if(close(Buy_ticket)==0)
                        {
                           Buy_ticket=0;
                           glob_b=1;
                        }
}
//****************
int OpenBuy()
{int ticket;
                    param(last_line); 
                     if(Buy_ticket<=0)               
                        { 
                           if(!DoubleOrderSending)
                           {
                           //Print("tp/sl   ",tpinitbuy,"  ",slinitbuy);
                           Buy_ticket=send_order(0,0,ticket,Lot,tp,sl,tpinitbuy,slinitbuy); 
                           }
                           else
                           {
                           Buy_ticket=send_order(0,0,ticket,Lot,0,0,0,0);
                           if(Buy_ticket>0)
                                 {
                                 Sleep(1000);
                                 ticket=send_order(0,1,Buy_ticket,Lot,tp,sl,tpinitbuy,slinitbuy);
                                 }
                           }
                              if(Buy_ticket>0) 
                                 {  
                                    fixline(last_line,Buy_ticket,color_buy);
                                    glob_b=1;
                                 } 
                         }
}
 //**********************
 int OpenSell()
 {int ticket;
                   param(last_line);
                   if(Sell_ticket<=0)
                        {
                              if(!DoubleOrderSending)
                              Sell_ticket=send_order(1,0,ticket,Lot,tp,sl,tpinitsell,slinitsell);
                              else
                              {
                              Sell_ticket=send_order(1,0,ticket,Lot,0,0,0,0);
                              if(Sell_ticket>0)
                                       {
                                       Sleep(1000); ticket=send_order(1,1,Sell_ticket,Lot,tp,sl,tpinitsell,slinitsell);
                                       }
                              }
                              if(Sell_ticket>0) { glob_s=1; fixline(last_line,Sell_ticket,color_sell); }
                        }
}
//**************************
bool search_name_pause()
{double p,p2,t,t2,y; int error,i; string n;
         if(IsTesting()) return(FALSE);
         if(!Teg_Pause) return (FALSE);
         i=search_name_obj("paus");
         if (i>=0)
         {
            p=   ObjectGet(Pause_name,OBJPROP_TIME1); 
            p2=iTime(NULL,0,0); 
     
            if(p-p2<0) 
               { 
               
               if(last_pause==p&&Pause==0) 
               {
                y=p2+12*60*Period();
                        for(i=0;i<10;i++)
                        {
                        ObjectSet(Pause_name,OBJPROP_TIME1,y);
                        WindowRedraw();
                        if(GetLastError()==0) break;
                        Sleep(100);
                        }
                       
                        last_pause=   y;
                        return(FALSE);
               }
                else
                {
                  Pause=1;
                  ObjectSet(Pause_name,OBJPROP_WIDTH,4);
                  WindowRedraw();
                  last_pause=p;
               return(TRUE); 
               }
               } else  
                        {                        
                        ObjectSet(Pause_name,OBJPROP_WIDTH,1);
                        if(t_first==1)
                              {
                              ObjectSet(Pause_name,OBJPROP_TIME1,ObjectGet(Pause_name,OBJPROP_TIME1)+Period()*60);
                              }
                        Pause=0;
                        WindowRedraw();
                        last_pause=ObjectGet(Pause_name,OBJPROP_TIME1); 
                        return(FALSE);
                        }
         }
}

//.........................
int search_name_obj(string c) 
{int i,k; string s;
   k=ObjectsTotal(); 
   for(i=k-1;i>=0;i--)  
   {  
      s=lowercaps(ObjectName(i));
    if (StringFind(s,c,0)>=0){ Pause_name=ObjectName(i); return(i);} 
   }
return (-1);
}
//....................................................
int fixline(string _name, int _B, color _color)
{int error;

string             txn=StringConcatenate("TICKET=",DoubleToStr(_B,0)," ",_name," DATE=",TimeToStr(TimeLocal(),
                   
                   TIME_DATE)," TIME=",TimeToStr(TimeLocal(),TIME_SECONDS));
                   
                   ObjectCreate(txn,OBJ_TREND,ObjectFind(_name),
                   ObjectGet( _name,OBJPROP_TIME1),ObjectGet( _name,OBJPROP_PRICE1),
                   ObjectGet( _name,OBJPROP_TIME2),ObjectGet( _name,OBJPROP_PRICE2));
                   
                   while(TRUE)
                   {
                     ObjectDelete(_name); 
                     WindowRedraw();
                     if(ObjectFind(_name)==-1) break;
                   }
                   
                   ObjectSet(txn,OBJPROP_STYLE,STYLE_DOT);
                   ObjectSet(txn,OBJPROP_COLOR,_color);
                  
}
//..........................................

int close_all(int typs)
  {
   bool   result;
   double price;
   int    cmd,error,i=0,k;
  
   double t;
   int ticket;
   string tr;
//----

  if(typs==0) tr="CLOSE ALL BUY"; else tr="CLOSE ALL SELL";
   k=OrdersTotal();
   for(i=k-1;i>=0;i--)
   {   
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
      {
         cmd=OrderType();
         t=OrderCloseTime();
         if((cmd==typs)&&Symbol()==OrderSymbol()&&t==0) 
         { 
               t=OrderOpenTime();
               if(t!=0)
                  { 
                     ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]);
                     ObjectSetText("PipsWork", tr, 14,"",Red);
                     WindowRedraw();
                     close_(cmd); /* Sleep(500);*/
                   }              
               } 
      }  
        
  }     
  
ObjectDelete("PipsWork");
   return(0);
  }
//.............................

int close_(int cmd)
{
   bool   result;
   double price;
   int    error,i=0;         
                  while(true)
                  {i+=1;
                   RefreshRates();
                  if(cmd==OP_BUY)      price=Bid; 
                        else           price=Ask;
                        result=OrderClose(OrderTicket(),OrderLots(),price,12,CLR_NONE);
                        error=GetLastError(); 
                        if(result==TRUE) error=0; 
                        if(error!=0) {Sleep(3000); RefreshRates();} //çàêðûâàòü ëþáèì, äàåì 6 ïîïûòîê
                  else break;
                  if(i>6)break; ///6 ïîïûòîê çàêðûòü îðäåð
                 }
return (error);
}
//......................
int close(int ticket)
  {
   bool   result;
   double price;
   int    cmd,error=-1,i=0;
   double t;
   string tr=StringConcatenate("CLOSE ", DoubleToStr(ticket,0)) ;
  
   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {
       cmd=OrderType();
       t=OrderCloseTime();
       if(Symbol()==OrderSymbol()&&t==0) { 
       ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]);
       ObjectSetText("PipsWork", tr, 14,"",Red);
       WindowRedraw();

       error=close_(cmd); 
       } 
      }  else {/*Print("Îøèáêà â âûáîðå ïîçèöèè=",i);*/}       
   ObjectDelete("PipsWork");
   return(error);
}
//..............................................................
int send_order(int teg_b,int sm, int ticket, double sLot, int _tp, int _sl, double ptp, double psl)
{int err=1,k=0,crach;
 double loss,profit,_Lot;
 bool result=TRUE;
 string tr;
 if(teg_b==0) tr="OPEN BUY"; else tr="OPEN SELL";
 ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]);
 ObjectSetText("PipsWork", tr, 14,"",Red);
 WindowRedraw();
       
       while(TRUE)
         { k+=1; RefreshRates(); 
                  double ask=NormalizeDouble(Ask,Digits),bid=NormalizeDouble(Bid,Digits);
              
                  if(sLot==0) _Lot=0.1; else _Lot=sLot;
                  if(teg_b==0)
                  {
                  if (_sl>0) loss  =ask-_sl*Point;  else loss=0;
                  if (_tp>0) profit=ask+_tp*Point;    else profit=0;
                  if(profit==0){if(ptp!=0) profit=ptp; }
                  if(loss==0){if(psl!=0) loss=psl;}
                                  
                  if(sm==0) ticket=OrderSend(Symbol(),OP_BUY,_Lot,ask,Slipp,loss,profit,NULL,0,0,CLR_NONE);                       
                                                else  result=OrderModify(ticket,0,loss,profit,0,CLR_NONE);                
                  } else
                     {
                     if (_sl>0) loss  =bid+_sl*Point;  else loss=0;
                     if (_tp>0) profit=bid-_tp*Point;    else profit=0;
                     
                     if(profit==0){if(ptp!=0) profit=ptp; }
                     if(loss==0){if(psl!=0) loss=psl;}
                     
                     if(sm==0) ticket=OrderSend(Symbol(),OP_SELL,_Lot,bid,Slipp,loss,profit,NULL,0,0,CLR_NONE);                       
                                                else      result=OrderModify(ticket,0,loss,profit,0,CLR_NONE);               
                     }
         err=ShowError(Pop,k);
         if(err<=1&&result==TRUE) break; else  Sleep(3000); 
         if(k>=Pop) break;
         if(err==4||err==6||err==128||err==135||err==137||err==138||err==146) crach=0; else crach=1;
         if(crach==1) break;  //No new repeat is are crazy  
         }

 return (ticket);
}
//....................................................
string search_right(string s, string c)
{ int i,j,k,len; string r="",p;    
         i=StringFind(s,c,i); 
         if(i!=-1) 
         {i+=StringLen(c);
         r=""; len =StringLen(s);
   for(j=0;j<len;j++) { k=StringGetChar(s,i+j); if(k<=57&&k>=48||k==46||k==44) 
                                                {  p=StringSubstr(s,i+j,1); r=r+p;
                                                } else 
                break;}
          }
   return(r);
}
//..............
string search_left(string s,string c) 
{ int i,j,k,len; string r="",p;    
         i=StringFind(s,c,0);  
  if(i!=-1)
  {
  r="";        len =StringLen(s);
  r=StringSubstr(s,0,i);
  }
  else r=s;
  r=lowercaps(r);
  return(r);
}
//.........................
string lowercaps(string s)
{int i,k,c; string r=""; k=StringLen(s); for(i=0;i<k;i++){c=StringGetChar(s,i); if(c<91&&c>64) c+=32;r=r+CharToStr(c);}
 return (r);
}
//..........................

void param(string s)
      {string b,r;
      
         r=lowercaps(s);
         b=search_right(r,"tp="); if(StringLen(b)>0) tp =NormalizeDouble(StrToDouble(b),0); else tp=0;
         b=search_right(r,"sl="); if(StringLen(b)>0) sl =NormalizeDouble(StrToDouble(b),0); else sl=0;
         
         ObjectSetText(s,StringConcatenate("!O.k! tp=",DoubleToStr(tp,0),"  ",
         "sl=",DoubleToStr(sl,0)));
      }
//.....................................................................

bool cross_down(string s, color col)
{ return(first_line(s, 0, col));}


bool cross_up(string s, color col)
{  return(first_line(s, 1, col));}
//******************************************
double first_line(string s,int u_d,color col)                                                                         
{     int i,w,wi,ind; 
      bool isfound=FALSE;
      string c,r,b;
      double rline;
      int k=ObjectsTotal(); 

      for(i=k-1;i>=0;i--)
      {  
         c=ObjectName(i);
         r=search_left(c," ");
         if(r==s)
          { 
            w=ObjectFind(c);
            if(w==0)
               {
                  RefreshRates();
                  price0=NormalizeDouble(Close[start],Digits);
                  price1=NormalizeDouble(Close[start+1],Digits);
       
               }else
                     {
                     RefreshRates();
                           isfound=indicator(w);
                     }
            if(w!=0){if(!isfound) {ObjectSetText(s,"Ëèíèÿ èñïîëíÿòüñÿ ÍÅ áóäåò"); return (FALSE);}}
          
            rline = ObjectGetValue_ByCurrent(c, start);
            if(rline!=0)
            {  if(u_d==1)
               {
               if(cross_method==0) {if(rline<price0&&rline>price1) {last_line=c; return (TRUE);  }}
               if(cross_method==1) {if(rline<price0) {last_line=c; return (TRUE);  }}
               } 
               else
                  {
                  if(cross_method==0) {if(rline>price0 && rline<price1){ last_line=c; return (TRUE); } }
                  if(cross_method==1) {if(rline>price0 ){ last_line=c; return (TRUE);} }
                  }
            }
          }
         }//for
   return (FALSE);
}
//...............................................
bool indicator(int w)
{                          int wi; 
                           bool isfound=FALSE;
                           wi=WindowFind(StringConcatenate("RSI(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iRSI(Symbol(),0,Period_indicator,0,start_indicator);
                           price1=iRSI(Symbol(),0,Period_indicator,0,start_indicator+1);
                           isfound=TRUE;
                           }
                           
                           wi=WindowFind(StringConcatenate("CCI(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iCCI(Symbol(),0,Period_indicator,0,start_indicator);
                           price1=iCCI(Symbol(),0,Period_indicator,0,start_indicator+1);
                           isfound=TRUE;
                           }
                            wi=WindowFind(StringConcatenate("%R(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iWPR(Symbol(),0,Period_indicator,start_indicator);
                           price1=iWPR(Symbol(),0,Period_indicator,start_indicator+1);
                           isfound=TRUE;
                           }
                           wi=WindowFind(StringConcatenate("Momentum(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iMomentum(Symbol(),0,Period_indicator,0,start_indicator);
                           price1=iMomentum(Symbol(),0,Period_indicator,0,start_indicator+1);
                           isfound=TRUE;
                           }
                            wi=WindowFind(StringConcatenate("Force(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iForce(Symbol(),0,Period_indicator,0,0,start_indicator);
                           price1=iForce(Symbol(),0,Period_indicator,0,0,start_indicator+1);
                           isfound=TRUE;
                           }
                            wi=WindowFind(StringConcatenate("DeM(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iDeMarker(Symbol(),0,Period_indicator,start_indicator);
                           price1=iDeMarker(Symbol(),0,Period_indicator,start_indicator+1);
                           isfound=TRUE;
                           }
                           wi=WindowFind(StringConcatenate("ATR(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iATR(Symbol(),0,Period_indicator,start_indicator);
                           price1=iATR(Symbol(),0,Period_indicator,start_indicator+1);
                           isfound=TRUE;
                           }
                           wi=WindowFind("OBV");
                           if(w==wi)
                           {
                           price0=iOBV(Symbol(),0,0,start_indicator);
                           price1=iOBV(Symbol(),0,0,start_indicator+1);
                           isfound=TRUE;
                           }
                           wi=WindowFind(StringConcatenate("MFI(",DoubleToStr(Period_indicator,0),")"));
                           if(w==wi)
                           {
                           price0=iMFI(Symbol(),0,Period_indicator,start_indicator);
                           price1=iMFI(Symbol(),0,Period_indicator,start_indicator+1);
                           isfound=TRUE;
                           }
            return(isfound);
     }
//
int SearchWorkLine() 
{int i,k,w,ti=0,ct,mt[1000]; string r,c;
   k=ObjectsTotal(); 
   for(i=k-1;i>=0;i--)
   {  
      c=ObjectName(i);
      w=ObjectFind(c);
     
      r=search_left(c," ");
      if(r==   "buylimit"  )  { param(c); ObjectSet(c,OBJPROP_COLOR,color_buy);}
      if(r==   "buystop"   )  { param(c); ObjectSet(c,OBJPROP_COLOR,color_buy);}
      if(r==   "tpbuy"     )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy);}
      if(r==   "slbuy"     )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy);}
      if(r==   "selllimit" )  { param(c); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "sellstop"  )  { param(c); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "tpsell"    )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "slsell"    )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "slallsell" )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "tpallsell" )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);}
      if(r==   "slallbuy"  )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy); }
      if(r==   "tpallbuy"  )  { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy); }
      if(r==   "tpinitbuy" )  { if(w==0){tpinitbuy=ObjectGetValueByShift(c,0);
                                ObjectSetText(c,"O.k. tpinitbuy=",   tpinitbuy);s_tpinitbuy=c; }
                                else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");}
      if(r==   "slinitbuy" )  { if(w==0){slinitbuy=ObjectGetValueByShift(c,0);
                                ObjectSetText(c,"O.k. slinitbuy=",   slinitbuy);s_slinitbuy=c; }
                                else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");}
      if(r==   "tpinitsell")  { if(w==0){tpinitsell=ObjectGetValueByShift(c,0);
                                ObjectSetText(c,"O.k. tpinitsell=",  tpinitsell);s_tpinitsell=c;}
                                else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");}
      if(r==   "slinitsell")  { if(w==0){slinitsell=ObjectGetValueByShift(c,0);
                                ObjectSetText(c,"O.k. slinitsell=", slinitsell);s_slinitsell=c; }
                                else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");}
      if(w!=0)
      {
      if(!indicator(w))ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");
      }
      r=search_left(c,"=");
      if(r==   "ticket"    )  { ti=StrToDouble(search_right(c,"TICKET=")); 
                                  if(qwest_order(ti)>0) 
                                    { 
                                       if(!IsTesting()) {if(Teg_DeletOpen) ObjectDelete(c);}
                                    } 
                                    mt[ct]=ti; ct+=1; 
                           }  
   } 
      int t_w;
      if(Buy_ticket!=0) 
      {t_w=0;
         for(i=0;i<ct;i++)
            {if(Buy_ticket==mt[i]) t_w=1; }
         if(t_w==0){if(close(Buy_ticket)==0){Buy_ticket=0; glob_b=1;}}
      }
      
      if(Sell_ticket!=0) 
      {t_w=0;
         for(i=0;i<ct;i++)
            {if(Sell_ticket==mt[i]) t_w=1; }
         if(t_w==0){if(close(Sell_ticket)==0){Sell_ticket=0; glob_s=1;}}
      }    
return (0);
}
//...............................
int qwest_order(int ticket) 
{ 
 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
         {
            double  t=OrderCloseTime();
            if(t==0) return (0); else return(1);
         }  else return (0);
}
//...............................................
double ObjectGetValue_ByCurrent(string c, int shift) //Value of 
{

double r=ObjectGetValueByShift (c,shift);
      if(r!=0) return(r+ObjectGetDelta_ByCurrent(c)); else return(0);
}
//....................................
double ObjectGetDelta_PerBar(string c) //Increment of Y-ordinate per Bar
{ 
 double p=  ObjectGet(c,OBJPROP_PRICE1);
 double p2= ObjectGet(c,OBJPROP_PRICE2);
 
 int b =    ObjectGetShiftByValue(c,p);
 int b2=    ObjectGetShiftByValue(c,p2);        
 double     z=b-b2;  
            if(z!=0)
               {
               double delta=(p2-p)/z;
               }
 return(delta);
}
//***************************************
double ObjectGetDelta_ByCurrent(string c)
{ 
      double t=TimeCurrent()-iTime(Symbol(),0,0);
      double tf=60*Period();
      double delta=ObjectGetDelta_PerBar(c);
      double r=delta*(t/tf);
 return(r);
}
//****************************************************************************

//þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ


int ShowError(int Pop, int k)
{
   string d_error;
   int err=GetLastError(),crach; //3 129 130 131 134 139 140 
   switch (err)            //ïîâòîð òîëüêî ïðè 4, 6, 135, 136 137 138 146 
   {
      case   0: return;
      case   1: d_error="Ðåçóëüòàò íåèçâåñòåí"; break;
      case   2: d_error="Îáùàÿ îøèáêà"; break;
      case   3: d_error="Íåïðàâèëüíûå ïàðàìåòðû"; break;
      case   4: d_error="Òîðãîâûé ñåðâåð çàíÿò"; break;
      case   5: d_error="Íå îáñëóæèâàåìàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
      case   6: d_error="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
      case   7: d_error="Íåäîñòàòî÷íî ïðàâ"; break;
      case   8: d_error="Ñëèøêîì ÷àñòûå çàïðîñû"; break;
      case   9: d_error="Íåäîïóñòèìàÿ îïåðàöèÿ âðåäÿùàÿ ñåðâåðó"; break;
      case  64: d_error="Ñ÷åò çàáëîêèðîâàí"; break;
      case  65: d_error="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
      case 128: d_error="Èñòåê ñðîê îæèäàíèÿ âûïîëíåíèÿ îðäåðà"; break;
      case 129: d_error="Íåïðàâèëüíàÿ öåíà"; break;
      case 130: d_error="Íåïðàâèëüíûå ñòîïû"; break;
      case 131: d_error="Íåïðàâèëüíûé îáúåì"; break;
      case 132: d_error="Ðûíîê çàêðûò"; break;
      case 133: d_error="Òîðãîâëÿ çàïðåùåíà"; break;
      case 134: d_error="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
      case 135: d_error="Öåíà èçìåíèëàñü"; break;
      case 136: d_error="Íåò öåí"; break;
      case 137: d_error="Áðîêåð çàíÿò"; break;
      case 138: d_error="Íîâûå öåíû"; break;
      case 139: d_error="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
      case 140: d_error="Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
      case 141: d_error="Ñëèøêîì ìíîãî çàïðîñîâ"; break;
      case 145: d_error="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
      case 146: d_error="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
      case 147: d_error="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
      default : d_error="Íåèçâåñòíàÿ îøèáêà"; break;
   }
   
   if(err==4||err==6||err==128||err==135||err==137||err==138||err==146) crach=0; else crach=1; 
   string field="     ";
   string msg="Îøèáêà #"+err+" "+d_error+field+ "Ïîïûòîê="+DoubleToStr(k,0)+"  "+DoubleToStr(Pop,0);
   string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
  
                  ObjectSetText("PipsWork", msg, 14,"",Red); 
     if(Pop-1==k) ObjectSetText("PipsWork", msg, 14,"",Red); 
   message = msg;
   return (err);
}
//O.k.



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Relative strength index
Commodity channel index
Larry William percent range indicator
Momentum indicator
Force index
DeMarker indicator
Indicator of the average true range
On Balance Volume indicator
Money flow index


Custom Indicators Used:

Order Management characteristics:

Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for GTerminal_V5a


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: