K-________ __ ___ build3





//---------------------------------------------------------------------------------------------------+
//                                                                               Ìîìîøíèê ïî ÑÊÁ.mq4 |
//                                                                                 Andrey A.Maksymov |
//                                                                                            maksaa |
//---------------------------------------------------------------------------------------------------+

#property copyright "Andrey A.Maksymov"
#include <WinUser32.mqh>

extern int       TotalNumber=100;     //ñêîëüêî áàðîâ íóìåðîâàòü
extern int       Shift1=0;            //ïðàâàÿ òî÷êà îñíîâàíèÿ òðåóãîëüíèêà
extern int       Shift2=0;            //âåðøèíà òðåóãîëüíèêà
extern int       Shift3=0;            //ëåâàÿ òî÷êà îñíîâàíèÿ òðåóãîëüíèêà
extern int       StopLoss=57;         //ëîññ äëÿ ñðàáîòàâøåãî îðäåðà
extern int       ProfitMin=50;        //ìèíèìàëüíûé ïðîôèò, ïîñëå êîòîðîãî ïîäæèìàåìñÿ
extern int       TakeProfitMax=100;   //ïðîôèò äëÿ ñðàáîòàâøåãî îðäåðà
extern int       TrailingStopMax=50;  //âåëè÷èíà òðàëà ñòàíäàðòíàÿ
extern int       TrailingStopMin=10;  //âåëè÷èíà òðàëà äëÿ ïîäæèìà
extern int       TrailingStep=5;      //øàã äëÿ òðàëà
extern double    Lots=0.1;            //êîëè÷åñòâî ëîòîâ
extern int       Step = 20;           //???

string BuyTicketSymb,
       SellTicketSymb,
       BarTimeSymb,
       BuyPriceSymb,
       SellPriceSymb,
       OrderBuyTypeSymb,
       OrderSellTypeSymb;
       
int cnt;

int deinit(){
return;   
}//deinit()

int init(){

   //íóìåðàöèÿ â MQL4 íà÷èíàåòñÿ ñ íóëÿ
   Shift1--;
   Shift2--;
   Shift3--;
   //----------------------------------

   GlobalVariablesDeleteAll();  //óäàëÿåì ñòàðûå ãëîáàëüíûå ïåðåìåííûå
   
   //ñîçäàåì èìåíà ãëîáàëüíûõ ïåðåìåííûõ
   BarTimeSymb=StringConcatenate(Symbol(),"_BarTime");
   BuyPriceSymb=StringConcatenate(Symbol(),"_BuyPrice");
   SellPriceSymb=StringConcatenate(Symbol(),"_SellPrice");
   BuyTicketSymb=StringConcatenate(Symbol(),"_BuyTicket");
   SellTicketSymb=StringConcatenate(Symbol(),"_SellTicket");
   OrderBuyTypeSymb=StringConcatenate(Symbol(),"_OrderBuyType");
   OrderSellTypeSymb=StringConcatenate(Symbol(),"_OrderSellType");
   //-----------------------------------
   
   GlobalVariableSet(BarTimeSymb,Time[0]);      //Çàïîìèíàåì âðåìÿ òåêóùåãî áàðà
   
   FunNum(Shift1,Shift2,Shift3,TotalNumber);    //Íóìåðóåì áàðû, ÷åðòèì êàíàë, ôîìèðóåì öåíû îðäåðîâ
   if(Shift1<0 || Shift2-Shift1<1 || Shift3-Shift2<1)return; //íåâåðíûå èñõîäíûå äàííûå
   FunOrders();                                 //Ïðîâåðÿåì íàëè÷èå îðäåðîâ ïî òåêóùåé ïàðå
   FunOpenBuy();                                //Âûñòàâëÿåì îòëîæåííûé îðäåð íà ïîêóïêó
   FunOpenSell();                               //Âûñòàâëÿåì îòëîæåííûå îðäåð íà ïðîäàæó
   FunModify();                                 //Ìîäèôèöèðóåì îòëîæåííûå îðäåðû
   
   //SendMail("ÎÒ ÏÎÌÎØÍÈÊÀ ÏÎ ÑÊÁ!", "Òåñòîâîå ïèñüìî"); 

return;   
}//init()

int start(){
   if(Shift1<0 || Shift2-Shift1<1 || Shift3-Shift2<1)return; //íåâåðíûå èñõîäíûå äàííûå
   if(GlobalVariableGet(BarTimeSymb)!=Time[0]){ //åñëè ñìåíèëñÿ áàð
      GlobalVariableSet(BarTimeSymb,Time[0]);   //Çàïîìèíàåì âðåìÿ òåêóùåãî áàðà
      Shift1++; //ñäâèãàåì íóìåðàöèþ áàðîâ
      Shift2++;
      Shift3++;
      FunNum(Shift1,Shift2,Shift3,TotalNumber); //Íóìåðóåì áàðû, ÷åðòèì êàíàë, ôîìèðóåì öåíû îðäåðîâ
      FunModify();      //Ìîäèôèöèðóåì îòëîæåííûå îðäåðû
    }
      FunOrders();      //Ïðîâåðÿåì íåò ëè óæå îòëîæåííûõ èëè ñðàáîòàâøèõ îðäåðîâ
      FunOpenBuy();     //Âûñòàâëÿåì îòëîæåííûå îðäåðà
      FunOpenSell();    //Âûñòàâëÿåì îòëîæåííûå îðäåðà
      //FunTrail();       //Òðàëèì îòêðûòûå îðäeðà

return;
}//start()
  
//---------------------------------------------------------------------------------------------------|     
//                                     ÔÓÍÊÖÈÈ                                                       |
//---------------------------------------------------------------------------------------------------|

//-Íóìåðóåì áàðû, ÷åðòèì êàíàë, ôîìèðóåì öåíû îðäåðîâ------------------------------------------------|
void FunNum(int Shift1,int Shift2,int Shift3,int TotalNumber){

   double Y=0,SellPrice,BuyPrice;
   int X,X1,X2;
   X=Shift3-Shift1;
   X1=Shift1;
   X2=Shift2;

   if(Shift1<0 || Shift2-Shift1<1 || Shift3-Shift2<1){
      MessageBox("Óêàæè òî÷êè êàíàëà! (Íîìåðà áàðîâ ñïðàâà íàëåâî Shift1, Shift2, Shift3)",
                 "Íóìåðàöèÿ",MB_OK);
      for(cnt=-1;cnt<TotalNumber;cnt++){
         ObjectCreate(StringConcatenate("",cnt), OBJ_TEXT, 0, Time[cnt], High[cnt]+3*Point);
         ObjectSetText(StringConcatenate("",cnt),StringConcatenate("",cnt+1),8,
                       "Times New Roman",Blue);
       }
      return(0);
    }
   ObjectDelete("CHANNEL");
   if(Low[Shift1]>Low[Shift2]){
      Y=High[Shift1]-High[Shift3];
      SellPrice=High[Shift1]+X1*Y/X;
      BuyPrice=Low[Shift2]+X2*Y/X;
      ObjectCreate("CHANNEL",OBJ_CHANNEL,0,
                   iTime(NULL,0,Shift3),iHigh(NULL,0,Shift3),
                   iTime(NULL,0,Shift1),iHigh(NULL,0,Shift1),
                   iTime(NULL,0,Shift2),iLow(NULL,0,Shift2));
    }
    else{
      Y=Low[Shift1]-Low[Shift3];
      SellPrice=High[Shift2]+X2*Y/X;
      BuyPrice=Low[Shift1]+X1*Y/X;
      ObjectCreate("CHANNEL",OBJ_CHANNEL,0,
                   iTime(NULL,0,Shift3),iLow(NULL,0,Shift3),
                   iTime(NULL,0,Shift1),iLow(NULL,0,Shift1),
                   iTime(NULL,0,Shift2),iHigh(NULL,0,Shift2));
    }
   GlobalVariableSet(BuyPriceSymb ,NormalizeDouble(BuyPrice, Digits));
   GlobalVariableSet(SellPriceSymb,NormalizeDouble(SellPrice,Digits));
   if(ObjectFind(StringConcatenate("",1))==-1)return(0);
   if(MessageBox("Óäàëèòü íóìåðàöèþ áàðîâ?", "Íóìåðàöèÿ", MB_YESNO|MB_ICONQUESTION)==IDYES){
      for(cnt=-1;cnt<TotalNumber;cnt++){
         ObjectDelete(StringConcatenate("",cnt));
       }
    }
}//FunNum
//---------------------------------------------------------------------------------------------------|

//-Ïðîâåðÿåì íåò ëè óæå îòëîæåííûõ èëè ñðàáîòàâøèõ îðäåðîâ-------------------------------------------| 
int FunOrders(){
   int total=OrdersTotal();
   GlobalVariableSet(BuyTicketSymb,0);
   GlobalVariableSet(SellTicketSymb,0);
   GlobalVariableSet(OrderBuyTypeSymb,-1);
   GlobalVariableSet(OrderSellTypeSymb,-1);
   for(cnt=0;cnt<total;cnt++){
      if(OrderSelect(cnt, SELECT_BY_POS)==false) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_BUY){
         GlobalVariableSet(BuyTicketSymb, OrderTicket());
         GlobalVariableSet(OrderBuyTypeSymb, OrderType());
         }
      if(OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP || OrderType()==OP_SELL){
         GlobalVariableSet(SellTicketSymb, OrderTicket());
         GlobalVariableSet(OrderSellTypeSymb, OrderType());
         }
     }
   if(GlobalVariableGet(OrderBuyTypeSymb)==OP_BUY &&
      GlobalVariableGet(OrderSellTypeSymb)==OP_SELLLIMIT){
      //Ñðàáîòàë Buy, óäàëÿåì SellLimit, ÷òîáû îòëîæèòü SellStop
      OrderSelect(GlobalVariableGet(SellTicketSymb),SELECT_BY_TICKET);
      if(OrderDelete(OrderTicket())==true)            
         GlobalVariableSet(SellTicketSymb,0); 
         GlobalVariableSet(OrderSellTypeSymb,-1);
      }
   if(GlobalVariableGet(OrderSellTypeSymb)==OP_SELL &&
      GlobalVariableGet(OrderBuyTypeSymb)==OP_BUYLIMIT){
      //Ñðàáîòàë Sell, óäàëÿåì BuyLimit, ÷òîáû îòëîæèòü BuyStop
      OrderSelect(GlobalVariableGet(BuyTicketSymb),SELECT_BY_TICKET);
      if(OrderDelete(OrderTicket())==true)            
         GlobalVariableSet(BuyTicketSymb,0);  
         GlobalVariableSet(OrderBuyTypeSymb,-1);
      }
   return;
}//FunOrders()
//---------------------------------------------------------------------------------------------------|     

//-Âûñòàâëÿåì îòëîæåííûå îðäåðà----------------------------------------------------------------------|
void FunOpenBuy(){
   if(GlobalVariableGet(OrderSellTypeSymb)==1){
      if(GlobalVariableGet(BuyTicketSymb)==0)
         GlobalVariableSet(BuyTicketSymb,
               OrderSend(Symbol(),OP_BUYSTOP, Lots,
                        GlobalVariableGet(SellPriceSymb)+StopLoss*Point, 0,
                        GlobalVariableGet(SellPriceSymb),
                        GlobalVariableGet(SellPriceSymb)+StopLoss*Point+TakeProfitMax*Point,
                        0,0,0,CLR_NONE));
      }
      else{   
      if(GlobalVariableGet(BuyTicketSymb)==0)
         GlobalVariableSet(BuyTicketSymb,
               OrderSend(Symbol(),OP_BUYLIMIT, Lots,
                        GlobalVariableGet(BuyPriceSymb), 0,
                        GlobalVariableGet(BuyPriceSymb)-StopLoss*Point,
                        GlobalVariableGet(BuyPriceSymb)+TakeProfitMax*Point,
                        0,0,0,CLR_NONE));
      }
   if(GlobalVariableGet(BuyTicketSymb)==-1)
      Print("Íå óäàëîñü óñòàíîâèòü îòëîæåííûé îðäåð íà ïîêóïêó! Ïî öåíå=",
      GlobalVariableGet(BuyPriceSymb)," ERROR=",GetLastError());
   Sleep(10000);
}//FunOpenBuy()
void FunOpenSell(){
   if(GlobalVariableGet(OrderBuyTypeSymb)==0){
      if(GlobalVariableGet(SellTicketSymb)==0)
         GlobalVariableSet(SellTicketSymb,
               OrderSend(Symbol(), OP_SELLSTOP, Lots,
                        GlobalVariableGet(BuyPriceSymb)-StopLoss*Point,0,
                        GlobalVariableGet(BuyPriceSymb),
                        GlobalVariableGet(BuyPriceSymb)-StopLoss*Point-TakeProfitMax*Point,
                        0,0,0,CLR_NONE));
      }
      else{   
      if(GlobalVariableGet(SellTicketSymb)==0)
         GlobalVariableSet(SellTicketSymb,
               OrderSend( Symbol(), OP_SELLLIMIT, Lots,
                        GlobalVariableGet(SellPriceSymb),0,
                        GlobalVariableGet(SellPriceSymb)+StopLoss*Point,
                        GlobalVariableGet(SellPriceSymb)-TakeProfitMax*Point,
                        0,0,0,CLR_NONE));
      }
   if(GlobalVariableGet(SellTicketSymb)==-1)
      Print("Íå óäàëîñü óñòàíîâèòü îòëîæåííûé îðäåð íà ïðîäàæó! Ïî öåíå=",
      GlobalVariableGet(SellPriceSymb)," ERROR=",GetLastError()); 
   Sleep(10000);
}//FunOpenSell()
//---------------------------------------------------------------------------------------------------|

//Ìîäèôèöèðóåì îòëîæåííûå îðäåðà---------------------------------------------------------------------|
void FunModify(){
   OrderSelect(GlobalVariableGet(BuyTicketSymb), SELECT_BY_TICKET);
   if (OrderType()==OP_BUYLIMIT && OrderOpenPrice()!=GlobalVariableGet(BuyPriceSymb)){
      OrderModify(OrderTicket(),GlobalVariableGet(BuyPriceSymb),
                  GlobalVariableGet(BuyPriceSymb)-StopLoss*Point,
                  GlobalVariableGet(BuyPriceSymb)+TakeProfitMax*Point,
                  0,CLR_NONE);
      Sleep(10000);
      }
   OrderSelect(GlobalVariableGet(SellTicketSymb),SELECT_BY_TICKET);
   if (OrderType()==OP_SELLLIMIT && OrderOpenPrice()!=GlobalVariableGet(SellPriceSymb)){
      OrderModify(OrderTicket(),GlobalVariableGet(SellPriceSymb),
                  GlobalVariableGet(SellPriceSymb)+StopLoss*Point,
                  GlobalVariableGet(SellPriceSymb)-TakeProfitMax*Point,
                  0,CLR_NONE);
      Sleep(10000);
      }
}//FunModify()
//---------------------------------------------------------------------------------------------------|





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It can change open orders parameters, due to possible stepping strategy

Other Features:

It opens Message Boxes to the user