//---------------------------------------------------------------------------------------------------+ // Ìîìîøíèê ïî ÑÊÁ.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